Code coverage report for src/decorators.js

Statements: 53.39% (63 / 118)      Branches: 7.14% (2 / 28)      Functions: 32.43% (12 / 37)      Lines: 53.39% (63 / 118)      Ignored: none     

All files » src/ » decorators.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 2291     1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 5 1       1                     1               1 5 4 2 2 2       1                 1                                                               1                 1             1                 1                 1                 1           1       1               1               1   1   1 1   1   1   2   6 6 6   2       1   1   1   1   1   1   1   1   1   1   1   1   1   1        
System.register(['core-js', 'aurelia-metadata', './bindable-property', './children', './element-config', './view-strategy', './html-behavior'], function (_export) {
  'use strict';
 
  var core, Metadata, Decorators, BindableProperty, ChildObserver, ElementConfigResource, ViewStrategy, UseViewStrategy, NoViewStrategy, HtmlBehaviorResource;
 
  _export('behavior', behavior);
 
  _export('customElement', customElement);
 
  _export('customAttribute', customAttribute);
 
  _export('templateController', templateController);
 
  _export('bindable', bindable);
 
  _export('dynamicOptions', dynamicOptions);
 
  _export('syncChildren', syncChildren);
 
  _export('useShadowDOM', useShadowDOM);
 
  _export('skipContentProcessing', skipContentProcessing);
 
  _export('containerless', containerless);
 
  _export('viewStrategy', viewStrategy);
 
  _export('useView', useView);
 
  _export('noView', noView);
 
  _export('elementConfig', elementConfig);
 
  function validateBehaviorName(name, type) {
    if (/[A-Z]/.test(name)) {
      throw new Error('\'' + name + '\' is not a valid ' + type + ' name.  Upper-case letters are not allowed because the DOM is not case-sensitive.');
    }
  }
 
  function behavior(override) {
    return function (target) {
      if (override instanceof HtmlBehaviorResource) {
        Reflect.defineMetadata(Metadata.resource, override, target);
      } else {
        var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
        Object.assign(resource, override);
      }
    };
  }
 
  function customElement(name) {
    validateBehaviorName(name, 'custom element');
    return function (target) {
      var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
      resource.elementName = name;
    };
  }
 
  function customAttribute(name, defaultBindingMode) {
    validateBehaviorName(name, 'custom attribute');
    return function (target) {
      var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
      resource.attributeName = name;
      resource.attributeDefaultBindingMode = defaultBindingMode;
    };
  }
 
  function templateController(target) {
    var deco = function deco(target) {
      var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
      resource.liftsContent = true;
    };
 
    return target ? deco(target) : deco;
  }
 
  function bindable(nameOrConfigOrTarget, key, descriptor) {
    var deco = function deco(target, key, descriptor) {
      var actualTarget = key ? target.constructor : target,
          //is it on a property or a class?
      resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, actualTarget),
          prop;
 
      if (key) {
        //is it on a property or a class?
        nameOrConfigOrTarget = nameOrConfigOrTarget || {};
        nameOrConfigOrTarget.name = key;
      }
 
      prop = new BindableProperty(nameOrConfigOrTarget);
      return prop.registerWith(actualTarget, resource, descriptor);
    };
 
    if (!nameOrConfigOrTarget) {
      //placed on property initializer with parens
      return deco;
    }
 
    if (key) {
      //placed on a property initializer without parens
      var target = nameOrConfigOrTarget;
      nameOrConfigOrTarget = null;
      return deco(target, key, descriptor);
    }
 
    return deco; //placed on a class
  }
 
  function dynamicOptions(target) {
    var deco = function deco(target) {
      var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
      resource.hasDynamicOptions = true;
    };
 
    return target ? deco(target) : deco;
  }
 
  function syncChildren(property, changeHandler, selector) {
    return function (target) {
      var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
      resource.childExpression = new ChildObserver(property, changeHandler, selector);
    };
  }
 
  function useShadowDOM(target) {
    var deco = function deco(target) {
      var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
      resource.targetShadowDOM = true;
    };
 
    return target ? deco(target) : deco;
  }
 
  function skipContentProcessing(target) {
    var deco = function deco(target) {
      var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
      resource.skipContentProcessing = true;
    };
 
    return target ? deco(target) : deco;
  }
 
  function containerless(target) {
    var deco = function deco(target) {
      var resource = Metadata.getOrCreateOwn(Metadata.resource, HtmlBehaviorResource, target);
      resource.containerless = true;
    };
 
    return target ? deco(target) : deco;
  }
 
  function viewStrategy(strategy) {
    return function (target) {
      Reflect.defineMetadata(ViewStrategy.metadataKey, strategy, target);
    };
  }
 
  function useView(path) {
    return viewStrategy(new UseViewStrategy(path));
  }
 
  function noView(target) {
    var deco = function deco(target) {
      Reflect.defineMetadata(ViewStrategy.metadataKey, new NoViewStrategy(), target);
    };
 
    return target ? deco(target) : deco;
  }
 
  function elementConfig(target) {
    var deco = function deco(target) {
      Reflect.defineMetadata(Metadata.resource, new ElementConfigResource(), target);
    };
 
    return target ? deco(target) : deco;
  }
 
  return {
    setters: [function (_coreJs) {
      core = _coreJs['default'];
    }, function (_aureliaMetadata) {
      Metadata = _aureliaMetadata.Metadata;
      Decorators = _aureliaMetadata.Decorators;
    }, function (_bindableProperty) {
      BindableProperty = _bindableProperty.BindableProperty;
    }, function (_children) {
      ChildObserver = _children.ChildObserver;
    }, function (_elementConfig) {
      ElementConfigResource = _elementConfig.ElementConfigResource;
    }, function (_viewStrategy) {
      ViewStrategy = _viewStrategy.ViewStrategy;
      UseViewStrategy = _viewStrategy.UseViewStrategy;
      NoViewStrategy = _viewStrategy.NoViewStrategy;
    }, function (_htmlBehavior) {
      HtmlBehaviorResource = _htmlBehavior.HtmlBehaviorResource;
    }],
    execute: function () {
 
      Decorators.configure.parameterizedDecorator('behavior', behavior);
 
      Decorators.configure.parameterizedDecorator('customElement', customElement);
 
      Decorators.configure.parameterizedDecorator('customAttribute', customAttribute);
 
      Decorators.configure.simpleDecorator('templateController', templateController);
 
      Decorators.configure.parameterizedDecorator('bindable', bindable);
 
      Decorators.configure.simpleDecorator('dynamicOptions', dynamicOptions);
 
      Decorators.configure.parameterizedDecorator('syncChildren', syncChildren);
 
      Decorators.configure.simpleDecorator('useShadowDOM', useShadowDOM);
 
      Decorators.configure.simpleDecorator('skipContentProcessing', skipContentProcessing);
 
      Decorators.configure.simpleDecorator('containerless', containerless);
 
      Decorators.configure.parameterizedDecorator('viewStrategy', useView);
 
      Decorators.configure.parameterizedDecorator('useView', useView);
 
      Decorators.configure.simpleDecorator('noView', noView);
 
      Decorators.configure.simpleDecorator('elementConfig', elementConfig);
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmcvc3JjL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7c0JBY2dCLFFBQVE7OzJCQWFSLGFBQWE7OzZCQVViLGVBQWU7O2dDQVdmLGtCQUFrQjs7c0JBV2xCLFFBQVE7OzRCQThCUixjQUFjOzswQkFXZCxZQUFZOzswQkFTWixZQUFZOzttQ0FXWixxQkFBcUI7OzJCQVdyQixhQUFhOzswQkFXYixZQUFZOztxQkFRWixPQUFPOztvQkFNUCxNQUFNOzsyQkFVTixhQUFhOztBQTlKN0IsV0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3hDLFFBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0QixZQUFNLElBQUksS0FBSyxRQUFLLElBQUksMEJBQW9CLElBQUksdUZBQW9GLENBQUE7S0FDckk7R0FDRjs7QUFFTSxXQUFTLFFBQVEsQ0FBQyxRQUFRLEVBQUM7QUFDaEMsV0FBTyxVQUFTLE1BQU0sRUFBQztBQUNyQixVQUFHLFFBQVEsWUFBWSxvQkFBb0IsRUFBQztBQUMxQyxlQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQzdELE1BQUk7QUFDSCxZQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEYsY0FBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDbkM7S0FDRixDQUFBO0dBQ0Y7O0FBSU0sV0FBUyxhQUFhLENBQUMsSUFBSSxFQUFDO0FBQ2pDLHdCQUFvQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzdDLFdB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QyxTQUFTLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQyIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS90ZW1wbGF0aW5nL3NyYy9kZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvcmUgZnJvbSAnY29yZS1qcyc7XG5pbXBvcnQge01ldGFkYXRhLCBEZWNvcmF0b3JzfSBmcm9tICdhdXJlbGlhLW1ldGFkYXRhJztcbmltcG9ydCB7QmluZGFibGVQcm9wZXJ0eX0gZnJvbSAnLi9iaW5kYWJsZS1wcm9wZXJ0eSc7XG5pbXBvcnQge0NoaWxkT2JzZXJ2ZXJ9IGZyb20gJy4vY2hpbGRyZW4nO1xuaW1wb3J0IHtFbGVtZW50Q29uZmlnUmVzb3VyY2V9IGZyb20gJy4vZWxlbWVudC1jb25maWcnO1xuaW1wb3J0IHtWaWV3U3RyYXRlZ3ksIFVzZVZpZXdTdHJhdGVneSwgTm9WaWV3U3RyYXRlZ3l9IGZyb20gJy4vdmlldy1zdHJhdGVneSc7XG5pbXBvcnQge0h0bWxCZWhhdmlvclJlc291cmNlfSBmcm9tICcuL2h0bWwtYmVoYXZpb3InO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUJlaGF2aW9yTmFtZShuYW1lLCB0eXBlKSB7XG4gIGlmICgvW0EtWl0vLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke25hbWV9JyBpcyBub3QgYSB2YWxpZCAke3R5cGV9IG5hbWUuICBVcHBlci1jYXNlIGxldHRlcnMgYXJlIG5vdCBhbGxvd2VkIGJlY2F1c2UgdGhlIERPTSBpcyBub3QgY2FzZS1zZW5zaXRpdmUuYClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmVoYXZpb3Iob3ZlcnJpZGUpe1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0KXtcbiAgICBpZihvdmVycmlkZSBpbnN0YW5jZW9mIEh0bWxCZWhhdmlvclJlc291cmNlKXtcbiAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoTWV0YWRhdGEucmVzb3VyY2UsIG92ZXJyaWRlLCB0YXJnZXQpO1xuICAgIH1lbHNle1xuICAgICAgdmFyIHJlc291cmNlID0gTWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24oTWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0YXJnZXQpO1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXNvdXJjZSwgb3ZlcnJpZGUpO1xuICAgIH1cbiAgfVxufVxuXG5EZWNvcmF0b3JzLmNvbmZpZ3VyZS5wYXJhbWV0ZXJpemVkRGVjb3JhdG9yKCdiZWhhdmlvcicsIGJlaGF2aW9yKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUVsZW1lbnQobmFtZSl7XG4gIHZhbGlkYXRlQmVoYXZpb3JOYW1lKG5hbWUsICdjdXN0b20gZWxlbWVudCcpO1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0KXtcbiAgICB2YXIgcmVzb3VyY2UgPSBNZXRhZGF0YS5nZXRPckNyZWF0ZU93bihNZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHRhcmdldCk7XG4gICAgcmVzb3VyY2UuZWxlbWVudE5hbWUgPSBuYW1lO1xuICB9XG59XG5cbkRlY29yYXRvcnMuY29uZmlndXJlLnBhcmFtZXRlcml6ZWREZWNvcmF0b3IoJ2N1c3RvbUVsZW1lbnQnLCBjdXN0b21FbGVtZW50KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUF0dHJpYnV0ZShuYW1lLCBkZWZhdWx0QmluZGluZ01vZGUpe1xuICB2YWxpZGF0ZUJlaGF2aW9yTmFtZShuYW1lLCAnY3VzdG9tIGF0dHJpYnV0ZScpO1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0KXtcbiAgICB2YXIgcmVzb3VyY2UgPSBNZXRhZGF0YS5nZXRPckNyZWF0ZU93bihNZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHRhcmdldCk7XG4gICAgcmVzb3VyY2UuYXR0cmlidXRlTmFtZSA9IG5hbWU7XG4gICAgcmVzb3VyY2UuYXR0cmlidXRlRGVmYXVsdEJpbmRpbmdNb2RlID0gZGVmYXVsdEJpbmRpbmdNb2RlO1xuICB9XG59XG5cbkRlY29yYXRvcnMuY29uZmlndXJlLnBhcmFtZXRlcml6ZWREZWNvcmF0b3IoJ2N1c3RvbUF0dHJpYnV0ZScsIGN1c3RvbUF0dHJpYnV0ZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZUNvbnRyb2xsZXIodGFyZ2V0KXtcbiAgdmFyIGRlY28gPSBmdW5jdGlvbih0YXJnZXQpe1xuICAgIHZhciByZXNvdXJjZSA9IE1ldGFkYXRhLmdldE9yQ3JlYXRlT3duKE1ldGFkYXRhLnJlc291cmNlLCBIdG1sQmVoYXZpb3JSZXNvdXJjZSwgdGFyZ2V0KTtcbiAgICByZXNvdXJjZS5saWZ0c0NvbnRlbnQgPSB0cnVlO1xuICB9O1xuXG4gIHJldHVybiB0YXJnZXQgPyBkZWNvKHRhcmdldCkgOiBkZWNvO1xufVxuXG5EZWNvcmF0b3JzLmNvbmZpZ3VyZS5zaW1wbGVEZWNvcmF0b3IoJ3RlbXBsYXRlQ29udHJvbGxlcicsIHRlbXBsYXRlQ29udHJvbGxlcik7XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kYWJsZShuYW1lT3JDb25maWdPclRhcmdldCwga2V5LCBkZXNjcmlwdG9yKXtcbiAgdmFyIGRlY28gPSBmdW5jdGlvbih0YXJnZXQsIGtleSwgZGVzY3JpcHRvcil7XG4gICAgdmFyIGFjdHVhbFRhcmdldCA9IGtleSA/IHRhcmdldC5jb25zdHJ1Y3RvciA6IHRhcmdldCwgLy9pcyBpdCBvbiBhIHByb3BlcnR5IG9yIGEgY2xhc3M/XG4gICAgICAgIHJlc291cmNlID0gTWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24oTWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCBhY3R1YWxUYXJnZXQpLFxuICAgICAgICBwcm9wO1xuXG4gICAgaWYoa2V5KXsgLy9pcyBpdCBvbiBhIHByb3BlcnR5IG9yIGEgY2xhc3M/XG4gICAgICBuYW1lT3JDb25maWdPclRhcmdldCA9IG5hbWVPckNvbmZpZ09yVGFyZ2V0IHx8IHt9O1xuICAgICAgbmFtZU9yQ29uZmlnT3JUYXJnZXQubmFtZSA9IGtleTtcbiAgICB9XG5cbiAgICBwcm9wID0gbmV3IEJpbmRhYmxlUHJvcGVydHkobmFtZU9yQ29uZmlnT3JUYXJnZXQpO1xuICAgIHJldHVybiBwcm9wLnJlZ2lzdGVyV2l0aChhY3R1YWxUYXJnZXQsIHJlc291cmNlLCBkZXNjcmlwdG9yKTtcbiAgfTtcblxuICBpZighbmFtZU9yQ29uZmlnT3JUYXJnZXQpeyAvL3BsYWNlZCBvbiBwcm9wZXJ0eSBpbml0aWFsaXplciB3aXRoIHBhcmVuc1xuICAgIHJldHVybiBkZWNvO1xuICB9XG5cbiAgaWYoa2V5KXsgLy9wbGFjZWQgb24gYSBwcm9wZXJ0eSBpbml0aWFsaXplciB3aXRob3V0IHBhcmVuc1xuICAgIHZhciB0YXJnZXQgPSBuYW1lT3JDb25maWdPclRhcmdldDtcbiAgICBuYW1lT3JDb25maWdPclRhcmdldCA9IG51bGw7XG4gICAgcmV0dXJuIGRlY28odGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuICB9XG5cbiAgcmV0dXJuIGRlY287IC8vcGxhY2VkIG9uIGEgY2xhc3Ncbn1cblxuRGVjb3JhdG9ycy5jb25maWd1cmUucGFyYW1ldGVyaXplZERlY29yYXRvcignYmluZGFibGUnLCBiaW5kYWJsZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkeW5hbWljT3B0aW9ucyh0YXJnZXQpe1xuICB2YXIgZGVjbyA9IGZ1bmN0aW9uKHRhcmdldCl7XG4gICAgdmFyIHJlc291cmNlID0gTWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24oTWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0YXJnZXQpO1xuICAgIHJlc291cmNlLmhhc0R5bmFtaWNPcHRpb25zID0gdHJ1ZTtcbiAgfTtcblxuICByZXR1cm4gdGFyZ2V0ID8gZGVjbyh0YXJnZXQpIDogZGVjbztcbn1cblxuRGVjb3JhdG9ycy5jb25maWd1cmUuc2ltcGxlRGVjb3JhdG9yKCdkeW5hbWljT3B0aW9ucycsIGR5bmFtaWNPcHRpb25zKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNDaGlsZHJlbihwcm9wZXJ0eSwgY2hhbmdlSGFuZGxlciwgc2VsZWN0b3Ipe1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0KXtcbiAgICB2YXIgcmVzb3VyY2UgPSBNZXRhZGF0YS5nZXRPckNyZWF0ZU93bihNZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHRhcmdldCk7XG4gICAgcmVzb3VyY2UuY2hpbGRFeHByZXNzaW9uID0gbmV3IENoaWxkT2JzZXJ2ZXIocHJvcGVydHksIGNoYW5nZUhhbmRsZXIsIHNlbGVjdG9yKTtcbiAgfVxufVxuXG5EZWNvcmF0b3JzLmNvbmZpZ3VyZS5wYXJhbWV0ZXJpemVkRGVjb3JhdG9yKCdzeW5jQ2hpbGRyZW4nLCBzeW5jQ2hpbGRyZW4pO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2hhZG93RE9NKHRhcmdldCl7XG4gIHZhciBkZWNvID0gZnVuY3Rpb24odGFyZ2V0KXtcbiAgICB2YXIgcmVzb3VyY2UgPSBNZXRhZGF0YS5nZXRPckNyZWF0ZU93bihNZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHRhcmdldCk7XG4gICAgcmVzb3VyY2UudGFyZ2V0U2hhZG93RE9NID0gdHJ1ZTtcbiAgfTtcblxuICByZXR1cm4gdGFyZ2V0ID8gZGVjbyh0YXJnZXQpIDogZGVjbztcbn1cblxuRGVjb3JhdG9ycy5jb25maWd1cmUuc2ltcGxlRGVjb3JhdG9yKCd1c2VTaGFkb3dET00nLCB1c2VTaGFkb3dET00pO1xuXG5leHBvcnQgZnVuY3Rpb24gc2tpcENvbnRlbnRQcm9jZXNzaW5nKHRhcmdldCl7XG4gIHZhciBkZWNvID0gZnVuY3Rpb24odGFyZ2V0KXtcbiAgICB2YXIgcmVzb3VyY2UgPSBNZXRhZGF0YS5nZXRPckNyZWF0ZU93bihNZXRhZGF0YS5yZXNvdXJjZSwgSHRtbEJlaGF2aW9yUmVzb3VyY2UsIHRhcmdldCk7XG4gICAgcmVzb3VyY2Uuc2tpcENvbnRlbnRQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgfTtcblxuICByZXR1cm4gdGFyZ2V0ID8gZGVjbyh0YXJnZXQpIDogZGVjbztcbn1cblxuRGVjb3JhdG9ycy5jb25maWd1cmUuc2ltcGxlRGVjb3JhdG9yKCdza2lwQ29udGVudFByb2Nlc3NpbmcnLCBza2lwQ29udGVudFByb2Nlc3NpbmcpO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbmVybGVzcyh0YXJnZXQpe1xuICB2YXIgZGVjbyA9IGZ1bmN0aW9uKHRhcmdldCl7XG4gICAgdmFyIHJlc291cmNlID0gTWV0YWRhdGEuZ2V0T3JDcmVhdGVPd24oTWV0YWRhdGEucmVzb3VyY2UsIEh0bWxCZWhhdmlvclJlc291cmNlLCB0YXJnZXQpO1xuICAgIHJlc291cmNlLmNvbnRhaW5lcmxlc3MgPSB0cnVlO1xuICB9O1xuXG4gIHJldHVybiB0YXJnZXQgPyBkZWNvKHRhcmdldCkgOiBkZWNvO1xufVxuXG5EZWNvcmF0b3JzLmNvbmZpZ3VyZS5zaW1wbGVEZWNvcmF0b3IoJ2NvbnRhaW5lcmxlc3MnLCBjb250YWluZXJsZXNzKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZpZXdTdHJhdGVneShzdHJhdGVneSl7XG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQpe1xuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoVmlld1N0cmF0ZWd5Lm1ldGFkYXRhS2V5LCBzdHJhdGVneSwgdGFyZ2V0KTtcbiAgfVxufVxuXG5EZWNvcmF0b3JzLmNvbmZpZ3VyZS5wYXJhbWV0ZXJpemVkRGVjb3JhdG9yKCd2aWV3U3RyYXRlZ3knLCB1c2VWaWV3KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVZpZXcocGF0aCl7XG4gIHJldHVybiB2aWV3U3RyYXRlZ3kobmV3IFVzZVZpZXdTdHJhdGVneShwYXRoKSk7XG59XG5cbkRlY29yYXRvcnMuY29uZmlndXJlLnBhcmFtZXRlcml6ZWREZWNvcmF0b3IoJ3VzZVZpZXcnLCB1c2VWaWV3KTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vVmlldyh0YXJnZXQpe1xuICB2YXIgZGVjbyA9IGZ1bmN0aW9uKHRhcmdldCl7XG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShWaWV3U3RyYXRlZ3kubWV0YWRhdGFLZXksIG5ldyBOb1ZpZXdTdHJhdGVneSgpLCB0YXJnZXQpO1xuICB9O1xuXG4gIHJldHVybiB0YXJnZXQgPyBkZWNvKHRhcmdldCkgOiBkZWNvO1xufVxuXG5EZWNvcmF0b3JzLmNvbmZpZ3VyZS5zaW1wbGVEZWNvcmF0b3IoJ25vVmlldycsIG5vVmlldyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50Q29uZmlnKHRhcmdldCl7XG4gIHZhciBkZWNvID0gZnVuY3Rpb24odGFyZ2V0KXtcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKE1ldGFkYXRhLnJlc291cmNlLCBuZXcgRWxlbWVudENvbmZpZ1Jlc291cmNlKCksIHRhcmdldCk7XG4gIH07XG5cbiAgcmV0dXJuIHRhcmdldCA/IGRlY28odGFyZ2V0KSA6IGRlY287XG59XG5cbkRlY29yYXRvcnMuY29uZmlndXJlLnNpbXBsZURlY29yYXRvcignZWxlbWVudENvbmZpZycsIGVsZW1lbnRDb25maWcpO1xuIl19